# -*- coding: utf-8 -*-
import datetime
import os
import re

from scrapy.utils.project import get_project_settings


def strq2b(ustring):
    """中文特殊符号转英文特殊符号"""
    #中文特殊符号批量识别

    pattern = re.compile('[，。：“”【】《》？；、（）‘’『』「」﹃﹄〔〕—·]')

    #re.compile: 编译一个正则表达式模式，返回一个模式（匹配模式）对象。
    #[...]用于定义待转换的中文特殊符号字符集

    fps = re.findall(pattern, ustring)

    #re.findall: 搜索string，以列表形式返回全部能匹配的子串。

    #对有中文特殊符号的文本进行符号替换

    if len(fps) > 0:
        ustring = ustring.replace('，', ',')
        ustring = ustring.replace('。', '.')
        ustring = ustring.replace('：', ':')
        ustring = ustring.replace('“', '"')
        ustring = ustring.replace('”', '"')
        ustring = ustring.replace('【', '[')
        ustring = ustring.replace('】', ']')
        ustring = ustring.replace('《', '<')
        ustring = ustring.replace('》', '>')
        ustring = ustring.replace('？', '?')
        ustring = ustring.replace('；', ':')
        ustring = ustring.replace('、', ',')
        ustring = ustring.replace('（', '(')
        ustring = ustring.replace('）', ')')
        ustring = ustring.replace('‘', "'")
        ustring = ustring.replace('’', "'")
        ustring = ustring.replace('’', "'")
        ustring = ustring.replace('『', "[")
        ustring = ustring.replace('』', "]")
        ustring = ustring.replace('「', "[")
        ustring = ustring.replace('」', "]")
        ustring = ustring.replace('﹃', "[")
        ustring = ustring.replace('﹄', "]")
        ustring = ustring.replace('〔', "{")
        ustring = ustring.replace('〕', "}")
        ustring = ustring.replace('—', "-")
        ustring = ustring.replace('·', ".")

    """全角转半角"""
    #转换说明：
    #全角字符unicode编码从65281~65374 （十六进制 0xFF01 ~ 0xFF5E）
    #半角字符unicode编码从33~126 （十六进制 0x21~ 0x7E）
    #空格比较特殊，全角为 12288（0x3000），半角为 32（0x20）
    #除空格外，全角/半角按unicode编码排序在顺序上是对应的（半角 + 0x7e= 全角）,所以可以直接通过用+-法来处理非空格数据，对空格单独处理。

    rstring = ""
    for uchar in ustring:
        inside_code = ord(uchar)
        if inside_code == 12288:                                #全角空格直接转换
            inside_code = 32
        elif (inside_code >= 65281 and inside_code <= 65374):   #全角字符（除空格）根据关系转化
            inside_code -= 65248
        rstring += chr(inside_code)
    return rstring

def get_today_filename():
    x = datetime.datetime.now()
    return x.strftime('%Y') + x.strftime('%m') + x.strftime('%d')

def write_html(response):
    file = open('/home/scrapy/baidusolu/export/baiduresult.html', 'w')
    file.write(response.body.decode('utf-8', 'ignore'))
    file.close()

def clean_data():
    origin_filename = get_svc('EXPORT_ORIGIN_DIR')
    clean_filename = get_svc('EXPORT_CLEAN_DIR')

    if os.path.exists(origin_filename):

        if os.path.exists(clean_filename):
            # os.remove(clean_filename)
            open(clean_filename, 'w').close()

        fp = open(clean_filename, 'a')

        for l in open(origin_filename).readlines():
            line = l.strip('\n').strip()
            arr = line.split('|', -1)

            ex = arr[1].find('"')
            if ex == 0:
                arr[1] = arr[1].lstrip('"')
                arr[1] = arr[1].rstrip('"')

            arr[1] = strq2b(arr[1])

            str = ("%s|%s|%s|%s") % (
                arr[0],
                arr[1],
                arr[2],
                arr[3],
            )
            fp.write(str)
            fp.write('\n')

        fp.close()
    pass

def get_svc(s):
    settings = get_project_settings()
    dir = settings.get(s)
    if not os.path.exists(dir):
        os.mkdir(dir)
    return dir + get_today_filename() + '.svc'

def get_sql():
    settings = get_project_settings()
    dir = settings.get('EXPORT_SQL_DIR')
    if not os.path.exists(dir):
        os.mkdir(dir)
    return dir + get_today_filename() + '.sql'
